Compute potential evapotranspiration with FAO56 Penman-Monteith model for a reference grass "A hypothetical reference crop with an assumed crop height of 0.12 m, a fixed surface resistance of 70 s m-1 and an albedo of 0.23."
References:
Allen, R.G.; Pereira, L.S.; Raes, D.; Smith, M. Crop Evapotranspiration-Guidelines for Computing Crop Water Requirements-FAO Irrigation and Drainage Paper 56, 9th ed.; Food and Agriculture Organization of the United Nations: Rome, Italy, 1998; ISBN 92-5-104219-5.
Lincoln Zotarelli, Michael D. Dukes, Consuelo C. Romero, Kati W. Migliaccio, and Kelly T. Morgan, Step by Step Calculation of the Penman-Monteith Evapotranspiration (FAO-56 Method), Agricultural and Biological Engineering Department, University of Florida, 2009. https://edis.ifas.ufl.edu/pdf/AE/AE45900.pdf
https://wetlandscapes.github.io/blog/blog/penman-monteith-and-priestley-taylor/
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=float), | intent(in) | :: | airTemp | air temperature [°C] | ||
| real(kind=float), | intent(in) | :: | netRad | net radiation [W/m2] | ||
| real(kind=float), | intent(in) | :: | netRadFAO | net radiation for reference vegetation, with albedo = 0.23 [W/m2] | ||
| real(kind=float), | intent(in) | :: | rh | air relative humidity [0-100] | ||
| real(kind=float), | intent(in) | :: | wind | wind speed [m/s] | ||
| real(kind=float), | intent(in) | :: | fc | fractional coverage by vegetation [0-1] | ||
| real(kind=float), | intent(in) | :: | elevation | terrain elevation [m a.s.l.] | ||
| real(kind=float), | intent(in) | :: | zws | wind speed measurement heigth [m] | ||
| real(kind=float), | intent(in) | :: | zrhum | relative humidity measurement heigth [m] | ||
| real(kind=float), | intent(in) | :: | lai | leaf area index [m2/m2] | ||
| real(kind=float), | intent(out) | :: | pt | potential transpiration (from vegetation) [m/s] | ||
| real(kind=float), | intent(out) | :: | pe | potential evaporation (from water or saturated soil) [m/s] | ||
| real(kind=float), | intent(out) | :: | pet | potential evapotranspiration [m/s] | 
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=float), | public, | parameter | :: | R1 | = | 0.287 | gas specific constant (kJkg^-1K^-1) | 
| real(kind=float), | public | :: | Tkv | virtual air temperature (K) | |||
| real(kind=float), | public | :: | airPress | air pressure [KPa] | |||
| real(kind=float), | public | :: | cp | humid air specific heat (MJkg^-1°C^-1) | |||
| real(kind=float), | public | :: | des | the slope of the relationship between saturation vapour pressure and temperature | |||
| real(kind=float), | public | :: | ea | actual vapor pressure (Pa) | |||
| real(kind=float), | public, | parameter | :: | epsilon | = | 0.622 | |
| real(kind=float), | public | :: | es | saturation vapor pressure (Pa) | |||
| real(kind=float), | public | :: | gamma | psychrometric constant [kPa °C-1] | |||
| real(kind=float), | public | :: | groundHeat | ground heat flux [MJ m-2 s-1] | |||
| real(kind=float), | public, | parameter | :: | k | = | 0.41 | von Karman’s constant | 
| real(kind=float), | public, | parameter | :: | lambda | = | 2.453 | |
| real(kind=float), | public | :: | netRadFAO_MJ | FAO net radiation in MJm^-2s^-1 | |||
| real(kind=float), | public | :: | netRadMJ | net radiation in MJm^-2s^-1 | |||
| real(kind=float), | public | :: | rabs | aerodynamic resistance of bare soil (s/m) | |||
| real(kind=float), | public | :: | rhoAir | air density (kgm^-3) | |||
| real(kind=float), | public | :: | srmin | = | 70 | minimum stomatal resistance of reference grass [s/m] | |
| real(kind=float), | public | :: | ws2m | wind speed at 2m (m/s) | |||
| real(kind=float), | public | :: | z | = | 0.12 | reference grass height [m] | |
| real(kind=float), | public | :: | z1 | bare soil heigth (m) | |||
| real(kind=float), | public | :: | zd1 | bare soil zero plane displacement height (m) | |||
| real(kind=float), | public | :: | zh1 | relative humidity measurement heigth + z1 (m) | |||
| real(kind=float), | public | :: | zm1 | wind speed measurement heigth + z1 (m) | |||
| real(kind=float), | public | :: | zrh1 | Roughness length governing transfer of heat and vapor above zd1 (m) | |||
| real(kind=float), | public | :: | zrw1 | Roughness length governing momentum transfer (m) | 
SUBROUTINE FAO56PenmanMonteith & ! (airTemp, netRad, netRadFAO, rh, wind, fc, elevation, zws, zrhum, lai, pt, pe, pet) IMPLICIT NONE !Arguments with intent(in): REAL (KIND = float), INTENT(in) :: airTemp !!air temperature [°C] REAL (KIND = float), INTENT(in) :: netRad !! net radiation [W/m2] REAL (KIND = float), INTENT(in) :: netRadFAO !! net radiation for reference vegetation, with albedo = 0.23 [W/m2] REAL (KIND = float), INTENT(in) :: rh !! air relative humidity [0-100] REAL (KIND = float), INTENT(in) :: wind !! wind speed [m/s] REAL (KIND = float), INTENT(in) :: fc !! fractional coverage by vegetation [0-1] REAL (KIND = float), INTENT(in) :: elevation !! terrain elevation [m a.s.l.] REAL (KIND = float), INTENT(in) :: zws !! wind speed measurement heigth [m] REAL (KIND = float), INTENT(in) :: zrhum !! relative humidity measurement heigth [m] REAL (KIND = float), INTENT(in) :: lai !! leaf area index [m2/m2] !Arguments with intent(out): REAL (KIND = float), INTENT(out) :: pt !! potential transpiration (from vegetation) [m/s] REAL (KIND = float), INTENT(out) :: pe !! potential evaporation (from water or saturated soil) [m/s] REAL (KIND = float), INTENT(out) :: pet !! potential evapotranspiration [m/s] !local declarations: REAL (KIND = float) :: z = 0.12 !! reference grass height [m] REAL (KIND = float) :: srmin = 70 !! minimum stomatal resistance of reference grass [s/m] REAL (KIND = float) :: groundHeat !!ground heat flux [MJ m-2 s-1] REAL (KIND = float) :: es !!saturation vapor pressure (Pa) REAL (KIND = float) :: ea !!actual vapor pressure (Pa) REAL (KIND = float) :: des !!the slope of the relationship between saturation vapour pressure and temperature REAL (KIND = float) :: airPress !!air pressure [KPa] REAL (KIND = float) :: gamma !!psychrometric constant [kPa °C-1] REAL (KIND = float) :: ws2m !!wind speed at 2m (m/s) REAL (KIND = float) :: z1 !!bare soil heigth (m) REAL (KIND = float) :: zm1 !! wind speed measurement heigth + z1 (m) REAL (KIND = float) :: zh1 !! relative humidity measurement heigth + z1 (m) REAL (KIND = float) :: zd1 !! bare soil zero plane displacement height (m) REAL (KIND = float) :: zrw1 !! Roughness length governing momentum transfer (m) REAL (KIND = float) :: zrh1 !! Roughness length governing transfer of heat and vapor above zd1 (m) REAL (KIND = float) :: rabs !! aerodynamic resistance of bare soil (s/m) REAL (KIND = float) :: cp !! humid air specific heat (MJkg^-1°C^-1) REAL (KIND = float) :: Tkv !! virtual air temperature (K) REAL (KIND = float) :: rhoAir !!air density (kgm^-3) REAL (KIND = float) :: netRadMJ !! net radiation in MJm^-2s^-1 REAL (KIND = float) :: netRadFAO_MJ !! FAO net radiation in MJm^-2s^-1 REAL (KIND = float), PARAMETER :: k = 0.41 !!von Karman’s constant REAL (KIND = float), PARAMETER :: epsilon = 0.622 ! ratio molecular weight of water vapour/dry air REAL (KIND = float), PARAMETER :: lambda = 2.453 !2.2647 !!latent heat of vaporization (MJ / kg) REAL (KIND = float), PARAMETER :: R1 = 0.287 !!gas specific constant (kJkg^-1K^-1) !-----------------------------------------end of declarations------------------ ! compute saturation vapor pressure es = 0.6108 * EXP ( ( 17.27 * airTemp ) / ( airTemp + 237.3 ) ) !actual vapor pressure ea = rh / 100. * es !compute the slope of saturation vapour pressure curve (Allen. et al. 1998) des = ( 4098. * es ) / ( ( airTemp + 237.3 )**2. ) !compute atmospheric pressure airPress = 101.3 * ( ( 293. - 0.0065 * elevation ) / 293. )** 5.26 !compute psychrometric constant gamma = 0.665 * 0.001 * airPress !move wind speed to 2 m reference height (Zotarelli et al., 2009) IF ( zws /= 2. ) THEN ws2m = wind ELSE ws2m = wind * 4.87 / LOG ( 67.8 * zws - 5.42 ) END IF !aerodynamic variables of bare soil z1 = 0.1 zm1 = zws + z1 zd1 = 2. / 3. * z1 zrw1 = 0.123 * z1 zh1 = zrhum + z1 zrh1 = 0.1 * zrw1 !compute aerodynamic resistance of bare soil rabs = LOG ( (zm1 - zd1) / zrw1 ) * LOG ( (zh1 - zd1) / zrh1 ) / ( k**2 * wind ) ! humid air specific heat (MJkg^-1°C^-1) cp = gamma * epsilon * lambda / airPress !virtual air temperature (K) Tkv = 1.01 * ( airTemp + 273. ) !air density (kgm^-3) rhoAir = airPress / ( Tkv * R1 ) !check and convert net radiation IF ( netRad < 0 ) THEN netRadMJ = 0. ELSE netRadMJ = netRad * 0.000001 END IF IF ( netRadFAO < 0 ) THEN netRadFAO_MJ = 0. ELSE netRadFAO_MJ = netRadFAO * 0.000001 END IF ! compute ground heat flux as a fraction of net radiation Anderson et al. (2007) ! groundHeat is assumed to affect evaporation from bare soil only groundHeat = 0.31 * netRadMJ !compute evaporation (from saturated bare soil or water) pe = ( des * ( netRadMJ - groundHeat ) + rhoAir * cp * ( es - ea ) / rabs ) / & ( lambda * ( des + gamma ) ) * millimeter !compute transpiration from vegetation IF (fc > 0.) THEN pt = ( 0.408 * des * ( netRadMJ - groundHeat ) + gamma * (900. / day ) / & ( airTemp + 273. ) * ws2m * (es - ea) ) / & (des + gamma * ( 1. + 0.34 * ws2m ) ) * millimeter ELSE pt = 0. END IF !compute evapotranspiration pet = ( 1. - fc) * pe + fc * pt RETURN END SUBROUTINE FAO56PenmanMonteith